# 该脚本用于寻找数据中的异常值
import numpy as np
import pandas as pd


# 箱线图的异常值
def FindException(x):
    t = type(x)
    Q1 = 1
    Q3 = 1
    if t == np.array or t == list or t==pd.Series:
        # 四分之一分数
        Q1 = np.quantile(x, 0.25)
        # 四分之三分数
        Q3 = np.quantile(x, 0.75)
    elif t == pd.DataFrame:
        # 四分之一分数
        Q1 = x.quantile(0.25)
        # 四分之三分数
        Q3 = x.quantile(0.75)
    IQR = Q3 - Q1
    CON1 = Q1 - 1.5 * IQR
    CON2 = Q3 + 1.5 * IQR
    # print(Judge)
    if t==pd.DataFrame:
        return x < CON1,x > CON2
    else:
        # 判断两个条件
        Judge = SaTisfy([x < CON1, x > CON2])
        return Judge
    # print(x[i][Judge])
    # print(np.where([x[i] < CON1]))


# 该函数用于判断两个条件中一个满足条件时的方法，引自AK-47脚本
def SaTisfy(x):
    Result = []
    # 由于条件是一个列表所有此处使用x[0]来进入列表
    for i in range(len(x[0])):
        # 只要满足其中任意一个元素为Ture
        R = x[0][i] or x[1][i]
        Result.append(R)
    return Result
